﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AvaliacaoOnline.Data;
using AvaliacaoOnline.Model;
using System.IO;

namespace Avaliacao.Controllers
{
    public class ClienteController : BaseController
    {
        public ActionResult List()
        {
            if (Session["TipoUsuario"] as string != "A")
            {
                Response.Redirect(@"~\"); return View();
            }

            List<AvaliacaoOnline.Data.Cliente> clientes = new ClienteRepository().GetClientes();

            return View("List", clientes);
        }

        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Edit()
        {
            if (Session["TipoUsuario"] as string != "A")
            {
                Response.Redirect(@"~\"); return View();
            }

            return Edit(-1);
        }

        public ActionResult Edit(int id)
        {
            if (Session["TipoUsuario"] as string != "A")
            {
                Response.Redirect(@"~\"); return View();
            }

            ClienteRepository clienteRepository = new ClienteRepository();

            var cliente = clienteRepository.GetCliente(id);

            return Edit(cliente);
        }

        private ActionResult Edit(Cliente cliente)
        {
            //prepara avaliacao nova se for o caso
            if (cliente == null)
            {
                cliente = new AvaliacaoOnline.Data.Cliente();
                cliente.Id = 0;
            }
            else
            {
                ClienteService clienteService = new ClienteService();
                ViewData["ImagemURL"] = Url.Content("~" + clienteService.GetLogoImagemURL((@"/"), cliente.Id));
            }

            return View("Edit", cliente);
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Save(AvaliacaoOnline.Data.Cliente cliente)
        {
            if (Session["TipoUsuario"] as string != "A")
            {
                Response.Redirect(@"~\"); return View();
            }

            ClienteRepository repository = new ClienteRepository();
            string erros = string.Empty;
            repository.GravarCliente(cliente, ref erros);

            if (erros.Length > 0)
            {
                ViewData["Message"] = erros.Replace(Environment.NewLine, "<br>");
                return Edit(cliente);
            }
            else
            {
                ViewData["Message"] = "Cliente atualizado com sucesso.";
                return Edit(cliente.Id);
            }
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Delete(int idCliente)
        {
            if (Session["TipoUsuario"] as string != "A")
            {
                Response.Redirect(@"~\"); return View();
            }

            ClienteRepository repository = new ClienteRepository();
            string erros = string.Empty;
            repository.ExcluirCliente(idCliente, ref erros);

            if (erros.Length > 0)
            {
                ViewData["Message"] = erros.Replace(Environment.NewLine, "<br>");
                return List();
            }
            else
            {
                ViewData["Message"] = "Cliente excluído com sucesso.";
                return List();
            }

        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Upload(int idCliente)
        {
            if (Session["TipoUsuario"] as string != "A")
            {
                Response.Redirect(@"~\"); return View();
            }

            HttpPostedFileBase postedFile = Request.Files[0];
            postedFile.SaveAs(
                UploadService.GetUploadPath(Server.MapPath("~/"), idCliente)
                + Path.GetFileName(postedFile.FileName));

            ClienteRepository repository = new ClienteRepository();

            repository.AtualizarImagemFundo(idCliente, postedFile.FileName);

            return Edit(idCliente);
        }
    }
}
